iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 12
0
自我挑戰組

golang初探系列 第 12

day12-陣列介紹

  • 分享至 

  • xImage
  •  

我們之前學會如何宣告變數,使用變數來儲存值。
但若今天如果需要儲存多個數值,使用原有的方式則會發現需要創建多個變數才能儲存多個數據,
所以這章節我們來討論陣列使用

ArrayTypes

陣列是由相同類型的元素(element)的集合所組成的資料結構,分配一塊連續的記憶體來儲存。利用元素的索引(index)可以計算出該元素對應的儲存位址

宣告及使用

var variable_name [SIZE] variale_type

陣列當中存有長度及容量
可以使用內置 len func 來查看陣列的長度
使用 cap func 來查看陣列的容量

//聲明一個有3個 float32 的陣列
	var balance [3]float32
	//一開始默認值為0
	fmt.Println(balance)
	balance[0] = 12.5
	balance[1] = 135
	fmt.Printf("balance 存儲的值 %v\n", balance)
	//可以就由索引來訪問儲存的值
	fmt.Printf("balance 索引為0 存儲的值 %v\n", balance[0])
	//實際能存儲的數值的量
	fmt.Printf("陣列的長度為%d\n", len(balance))
	//能夠存儲的最大數量
	fmt.Printf("陣列的容量為%d\n", cap(balance))

	//重新賦值
	balance[0] = 17.45
	fmt.Printf("balance 索引為0 存儲的值 %v\n", balance[0])

	//宣告直接賦值

	var b = [4]int{5, 6, 7, 8}
	fmt.Printf("b 存儲的值  %v\n", b)

	//宣告賦值 未賦值則是默認值
	var c = [5]int{7, 6, 4}
	fmt.Printf("c 存儲的值  %v\n", c)

	//宣告使用索引賦值

	var d = [5]int{1: 7, 3: 6, 4: 4}
	fmt.Printf("d 存儲的值  %v\n", d)
	//藉由賦值來推斷長度
	var e = [...]int{7, 8, 9, 10}
	fmt.Printf("e 存儲的值  %v\n", e)
	//實際能存儲的數值的量
	fmt.Printf("e 陣列的長度為%d\n", len(e))
	//能夠存儲的最大數量
	fmt.Printf("e 陣列的容量為%d\n", cap(e))

記憶體分配

陣列是分配一塊連續的記憶體來儲存

package main

import (
	"fmt"
)

func main() {
	a := [...]int8{1, 2, 3}
	fmt.Printf("a 的記憶體分配位置 %p \n", &a)
	fmt.Printf("陣列 a 的索引 0 記憶體分配位置 %p \n", &a[0])
	fmt.Printf("陣列 a 的索引 1 記憶體分配位置 %p \n", &a[1])
	fmt.Printf("陣列 a 的索引 2 記憶體分配位置 %p \n", &a[2])

}

Golang Array 屬於 Call by value

package main

import (
	"fmt"
)

func main() {
	a := [...]int8{1, 2, 3}
	fmt.Printf("a 記憶體分配位置 %p \n", &a)
	//使用 changeArray func
	changeArray(a)
    //可以查看陣列的數據當中並沒有更改
	fmt.Println(a)

}

func changeArray(arr [3]int8) {
	fmt.Printf("arr 記憶體分配位置 %p\n", &arr)
	//將 arr index 0 更換置0
	arr[0] = 100

}




上一篇
day11-運算符號介紹
下一篇
day13-Slice 切片介紹
系列文
golang初探30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言